package com.aasa.siccosap.dao;

import java.sql.CallableStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import javax.sql.DataSource;

import oracle.jdbc.OracleTypes;

import org.apache.log4j.Logger;

import com.aasa.siccosap.bean.DespachoBean;
import com.aasa.siccosap.bean.ProductoBean;
import com.aasa.siccosap.util.Constantes;

public class DespachoDAO extends accesoDao{
	static Logger logger = Logger.getLogger("DespachoDAO.class");
	public DespachoDAO()	throws accesoDaoException {
		super();
	}
	
	public DespachoDAO(DataSource dataSource) {
		super(dataSource);
	}

	public ArrayList<DespachoBean> cargarComboDespacho(String codigoCliente, String fechaInicio, 
			String fechaFin, String codigoObra) {
		ResultSet rs = null;
        this.av_message = null;
        this.storedProcedure = "begin SICCOSPK_PROYECTO.SICCOSSP_CONSULTA_DESPACHO(?,?,?,?,?,?); end;";
        ArrayList<DespachoBean> consultaDespacho = new ArrayList<DespachoBean>();
        try{
                this.conn = dataSource.getConnection();
                this.stmt = this.conn.prepareCall(storedProcedure);
                configuraParametrosConsultaDespacho(codigoCliente, fechaInicio, fechaFin, codigoObra);
                this.stmt.execute();
                this.av_message = (String)stmt.getObject(1);
                if(this.av_message.trim().toUpperCase().endsWith(Constantes.NO_ERRORS)){
                        rs = (ResultSet)stmt.getObject(2);
                        while(rs.next()){
                                DespachoBean detalleDespacho = creaRegistroConsultaDespacho(rs);
                                consultaDespacho.add(detalleDespacho);
                        }
                }else{
                    return null;
                }
                
                
        }catch (Exception e){
                e.printStackTrace();
                return null;
        }finally{
        		close(this.conn, rs, stmt);
        }
        return consultaDespacho;
	}

	private CallableStatement configuraParametrosConsultaDespacho(String codigoCliente, String fechaInicio, 
			String fechaFin, String codigoObra)
    throws SQLException{
    	stmt.registerOutParameter(1, OracleTypes.VARCHAR);               
        stmt.registerOutParameter(2, OracleTypes.CURSOR);
        stmt.setString(3, codigoObra);
        stmt.setString(4, codigoCliente);
        stmt.setString(5, fechaInicio);
        stmt.setString(6, fechaFin);
        return(stmt);          
    }
	
	private DespachoBean creaRegistroConsultaDespacho(ResultSet rs) throws SQLException {
		DespachoBean bean = new DespachoBean();
        bean.setStrPv_codCli(rs.getString("cod_cli"));
        bean.setStrPv_numObra(rs.getString("num_obra"));
        bean.setStrPv_numDespacho(rs.getString("num_despacho"));
        return bean;
	}
}
